package main

// main
//
//	@Description: 01-简单工厂模式:一个工厂负责创建所有的产品，通过条件判断决定创建那种产品 （工厂无抽象）
func main() {
	factory := SimpleFactory{}
	product1 := factory.createProduct(1)
	product1.showName()

	product2 := factory.createProduct(2)
	product2.showName()
}

// Phone
// @Description: 接口
type Phone interface {
	showName() string
}

// XiaoMiPhone 实现接口
type XiaoMiPhone struct {
}

func (a XiaoMiPhone) showName() string {
	return "小米手机"
}

// HuaWeiPhone 实现接口
type HuaWeiPhone struct {
}

func (w HuaWeiPhone) showName() string {
	return "华为手机"
}

// SimpleFactory 简单工厂
type SimpleFactory struct {
}

// createProduct
//
//	@Description: 简单工厂提供生成产品的方法
//	@receiver s
//	@param typ
//	@return Phone
func (s SimpleFactory) createProduct(typ int) Phone {
	switch typ {
	case 1:
		return XiaoMiPhone{}
	case 2:
		return HuaWeiPhone{}
	default:
		panic("暂不支持~")
	}
}
